package modelo

import java.lang.String
import java.util.ArrayList
import org.uqbar.commons.utils.Observable

@Observable
public class Sistema {
	
	@Property ArrayList<Planta> plantasDisponibles = new ArrayList<Planta>
	@Property ArrayList<Zombie> zombiesDisponibles = new ArrayList<Zombie>
	@Property int ultimaPlantaTomada=0
	
	
	new(Jugador jugador){
		val tipoT= new TipoTerrestre
		val tipoA= new TipoAquatico
		this.crearYGuardarZombie(100,50,"zombie basico")
		.crearYGuardarZombie(100,300,"zombie no basico")
		.crearYGuardarPlanta(100,50,"Tomate Asesino", tipoT)
		.crearYGuardarPlanta(100,200,"mandioca", tipoT)
		.crearYGuardarPlanta(100,400,"nananana", tipoT)
		//.crearYGuardarPlanta(100,200,"alga acuatica",tipoA)
		.crearYGuardarPlanta(10,10,"Planta Carnivora", tipoT)
		.crearYGuardarZombie(2000,10,"zombie conLanzaMisiles")
		.crearYGuardarPlanta(100,110,"Alga", tipoA)
		
		this.daleUnaPlantaPremioA(jugador)
		this.daleUnaPlantaPremioA(jugador)
	}
	
	def daleUnaPlantaPremioA(Jugador jugador){
		plantasDisponibles.get(ultimaPlantaTomada+1).agregateAJugador(jugador)
		ultimaPlantaTomada=ultimaPlantaTomada+1
	}
	
	def int cuantasPlantasTengo(){
		return (this.plantasDisponibles.size())
	}        
	def int cuantosZombiesTengo(){
		return (this.zombiesDisponibles.size())
	}
	
	
	def Planta crearPlanta(int danio, int aguante,String nombre, TipoDeTerreno tipoDeTerreno){
		var Planta plantaAux;
		plantaAux= new Planta();
		plantaAux.setDanio(danio);
		plantaAux.setResistencia(aguante);
		plantaAux.setNombre(nombre);
		plantaAux.setTipo(tipoDeTerreno)
		
		return plantaAux;
		
	}
	
	
	def void guardarPlanta(Planta plantita){
		plantasDisponibles.add(plantita)
	}
	
	
	def Zombie crearZombie(int danio, int aguante,String nombre){
		var Zombie zombieAux;
		zombieAux= new Zombie();
		zombieAux.setDanio(danio);
		zombieAux.setResistencia(aguante);
		zombieAux.setNombre(nombre);
		zombieAux.setResBase(aguante);
		
		
		return zombieAux;
		}
	
		
	def void guardarZombie(Zombie unZombie){
		zombiesDisponibles.add(unZombie)
	}
	
	
	
	def public Sistema crearYGuardarPlanta(int danio, int aguante,String nombre, TipoDeTerreno tipoDeTerreno){
		var Planta auxPlanta
		auxPlanta = this.crearPlanta(danio,aguante,nombre, tipoDeTerreno)
		this.guardarPlanta(auxPlanta)
		return this
		
	}
	def public Mejora crearMejora(int danio, int defensa,String nombre,int precio){
        var Mejora mejora;
        mejora= new Mejora();
        mejora.setDanio(danio);
        mejora.setDefensa(defensa);
        mejora.setNombre(nombre);
        mejora.setPrecio(precio);    

        return mejora;

        }
	
	def public Sistema crearYGuardarZombie(int danio, int aguante,String nombre){
		var Zombie auxZombie
		auxZombie = this.crearZombie(danio,aguante,nombre)
		this.guardarZombie(auxZombie)
		return this
	}
}